package com.transaction.utils;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;

import com.alibaba.fastjson.JSONObject;

public class Signature {
	
	/**
	 * 签名方法
	 * @Title:getSign
	 * @Description:TODO
	 * @param: @param map  参与签名的参数
	 * @param: @param privateKey 参与签名的约定的key
	 * @param: @return
	 * @author:kyn
	 * @time 2018年6月25日 下午4:32:58
	 * @return String
	 * @throws
	 */
    public static String getSign(Map<String,Object> map,String privateKey){
        ArrayList<String> list = new ArrayList<String>();
        for(Map.Entry<String,Object> entry:map.entrySet()){
            if(entry.getValue() !="" && entry.getValue() != null && !("".equals(entry.getValue()))){
                list.add(entry.getKey() + "=" + entry.getValue() + "&");
            }
        }
        int size = list.size();
        String [] arrayToSort = list.toArray(new String[size]);
        Arrays.sort(arrayToSort, String.CASE_INSENSITIVE_ORDER);
        StringBuilder sb = new StringBuilder();
        for(int i = 0; i < size; i ++) {
            sb.append(arrayToSort[i]);
        }
        sb.append("key="+privateKey);
        String result = sb.toString();
        System.out.println("sign 后result："+result);
        result = MD5Util.MD5Encode(result).toUpperCase();
        return result;
    }
    
    public static void main(String[] args) {
    	//解冻接口
    	Map<String,Object> map = new HashMap<String,Object>();
    	/**
    	 * {"releasePrice":"200.00","userPhone":"13426103402","totalPrice":"1000.00",
    	 * "freezeNper":"8","breakPrice":"800.00","nper":"8","freezePrice":"800.00",
    	 * "totalNper":"12","timestamp":"1495097370194","releaseNper":"4",
    	 * "applyNum":"abc73213","orderNum":"45673213",
    	 * "sign":"D1CFBCD7A03C9E51B2DDA679CF35FCD0","userStatus":"1"} 
    	 */
    	map.put("releasePrice", "0.00");	//已解冻金额
    	map.put("userPhone", "18510298855");
    	map.put("totalPrice", "10.00");	//总金额
    	map.put("freezeNper", "10");	//剩余解冻金期数
    	map.put("breakPrice", "10.00");	//本次解冻金额
    	map.put("nper", "10");	//本次解冻期数
    	map.put("freezePrice", "10.00");	//剩余解冻金额
    	map.put("totalNper", "10");	//套餐期数
    	map.put("timestamp", "1495097370194");
    	map.put("releaseNper", "0");	//已解冻期数
    	map.put("applyNum", "18510298855");
    	map.put("orderNum", "18510298855");
    	map.put("userStatus", "A");
    	//发码接口
//    	map.put("userName", "kyn测试08091511");
//    	map.put("userPhone", "18510298855");
//    	map.put("eventName", "测试套餐");
//    	map.put("orderNum", "18510298855");
//    	map.put("orderPrice", "10.00");
//    	map.put("city", "北京");
//    	map.put("storeName", "北京测试移动旗舰店6");
//    	map.put("storeNo", "123");
//    	map.put("monthPayment", "1.00");
//    	map.put("firstMonthPayment", "1.00");
//    	map.put("effectiveDate", "2018-06-27");
//    	map.put("endDate", "2019-07-27");
//    	map.put("nper", "10");
//    	map.put("timestamp", "1495097370194");
//    	
    	//转支付接口
//    	map.put("userPhone", "15842676013");
//    	map.put("applyNum", "10002");
//    	map.put("orderNum", "13777777777");
//    	map.put("userStatus", "A");
//    	map.put("nper", "");
//    	map.put("totalPrice", "10");	//总金额
//    	map.put("freezePrice", "10");	//剩余解冻金额
//    	map.put("releasePrice", "0");	//已解冻金额
//    	map.put("payPrice", "1");	//本次支付金额
//		map.put("tatalNper", "A");	//套餐期数
//    	map.put("releaseNper", "0");	//已解冻期数
//    	map.put("freezeNper", "10");	//剩余解冻金期数
//    	map.put("timestamp", "1495097370194");
    	
		// //异常数据同步
//		 map.put("applyNum", "1231231111137");
//		 map.put("orderNum", "18510299814");
//		 map.put("userStatus", "A");
//		 map.put("abnormalStatusNum", "0"); //本次解冻金额
//		 map.put("userPhone", "18510299814"); //本次解冻金额
//		 map.put("timestamp", "1495097370194");
    	
    	//解冻接口
//    	map.put("userPhone", "18510299815");
//    	map.put("applyNum", "abc7321223");
//    	map.put("orderNum", "18510299815");
//    	map.put("userStatus", "A");
//    	map.put("nper", "10"); //本次解冻期数
//    	map.put("totalPrice", "1.04"); //总金额
//    	map.put("freezePrice", "1.04");    //剩余解冻金额
//    	map.put("releasePrice", "0.00");   //已解冻金额
//    	map.put("breakPrice", "1.04"); //本次解冻金额
//    	map.put("totalNper", "10");    //套餐期数
//    	map.put("releaseNper", "0");   //已解冻期数
//    	map.put("freezeNper", "10");   //剩余解冻金期数
//    	map.put("timestamp", "1495097370194");
    	String sign=getSign(map, "1C8uRwHIanHm9msIapWpskRmpW6XINFK");
    	map.put("sign", sign);
    	System.out.println(sign);
    	DESTools des;
		try {
			des = new DESTools();
			System.out.println(des.getEncString(JSONObject.toJSONString(map)));
		} catch (Exception e) {
			e.printStackTrace();
		}
    }
}
